package edu.tsinghua.lumaqq.qq.packets.in._08;

import java.nio.ByteBuffer;

import edu.tsinghua.lumaqq.qq.beans.QQUser;
import edu.tsinghua.lumaqq.qq.packets._08BasicInPacket;
import edu.tsinghua.lumaqq.qq.packets.PacketParseException;

/**
 * Touch的服务器返回包
 * 1. 1字节的包头即 0x02
 * 2. QQ版本号，目前是0x113f
 * 3. 验证码登陆 2字节 0x0091
 * 4. 包序号 2字节 一直都是 0x0000
 * 5. 加密包体 16字节 解密之后是两字节的0x0000
 * 6. 包尾：1字节 0x03
 * <p/>
 * 虽然至今未发现这个包有什么用处， 但是处理了总比忽略了好吧， 毕竟我不用花那么多的时间去写界面
 *
 * @author luna
 */
public class _08TouchLoginReplyPacket extends _08BasicInPacket {

    public char replyCode;
    public byte[] serverIp;

    // public byte[] useless;
    public _08TouchLoginReplyPacket(ByteBuffer buf, int length, QQUser user)
            throws PacketParseException {
        super(buf, length, user);
    }

    /*
      * (non-Javadoc)
      *
      * @see edu.tsinghua.lumaqq.qq.packets._08InPacket#getPacketName()
      */
    @Override
    public String getPacketName() {
        return "Touch Reply _08Packet";
    }

    @Override
    public byte[] getDecryptKey(byte[] body) {
        return user.getPasswordKey();
    }

    @Override
    public byte[] getFallbackDecryptKey(byte[] body) {
        return user.getLoginTokenRandomKey();
    }

    /**
     * @author luna
     */
    @Override
    protected void parseBody(ByteBuffer buf) throws PacketParseException {
//		System.out.println(Util.convertByteToHexString(buf.array()));
        replyCode = buf.getChar();
        if (replyCode == (char) 0x0001) {// 获取推荐服务器地址
            buf.position(buf.position() + 9);
            serverIp = new byte[4];
            buf.get(serverIp);
        }
	}
}
